package it.clariter.dao;

import it.clariter.connection.MyConnection;
import it.clariter.model.TipologiaDocumento;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class TipologiaDocumentoDAO {

	public int insert(TipologiaDocumento tipologiaDocumento)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("INSERT INTO "+DaoConstants.NOME_TABELLA_TIPOLOGIA_DOCUMENTO+" SET "+DaoConstants.COLONNA_CODICE_TIPOLOGIA_DOCUMENTO+"=?,"+DaoConstants.COLONNA_DESCRIZIONE_TIPOLOGIA_DOCUMENTO+"=?");
			ps.setString(1, tipologiaDocumento.getCodice());
			ps.setString(2, tipologiaDocumento.getDescrizione());
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public int update(TipologiaDocumento tipologiaDocumento)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("UPDATE "+DaoConstants.NOME_TABELLA_TIPOLOGIA_DOCUMENTO+" SET "+DaoConstants.COLONNA_CODICE_TIPOLOGIA_DOCUMENTO+"=?,"+DaoConstants.COLONNA_DESCRIZIONE_TIPOLOGIA_DOCUMENTO+"=? WHERE "+DaoConstants.COLONNA_ID_TIPOLOGIA_DOCUMENTO+"=?");
			ps.setString(1, tipologiaDocumento.getCodice());
			ps.setString(2, tipologiaDocumento.getDescrizione());
			ps.setInt(3, tipologiaDocumento.getIdDocumento());
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public int delete(int idva)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("DELETE FROM "+DaoConstants.NOME_TABELLA_TIPOLOGIA_DOCUMENTO+" WHERE "+DaoConstants.COLONNA_ID_TIPOLOGIA_DOCUMENTO+"=?");
			ps.setInt(1, idva);
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public List<TipologiaDocumento>getList()
	{
		Connection c=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		List <TipologiaDocumento>list=new ArrayList<TipologiaDocumento>();
		TipologiaDocumento tipologiaDocumento=null;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("SELECT * FROM "+DaoConstants.NOME_TABELLA_TIPOLOGIA_DOCUMENTO);
			rs=ps.executeQuery();
			while(rs.next())
			{
				tipologiaDocumento=new TipologiaDocumento();
				tipologiaDocumento=makeObject(tipologiaDocumento,rs);
				list.add(tipologiaDocumento);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return list;
	}
	public TipologiaDocumento get(int idva)
	{
		Connection c=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		TipologiaDocumento tipologiaDocumentoo=null;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("SELECT * FROM "+DaoConstants.NOME_TABELLA_TIPOLOGIA_DOCUMENTO+" WHERE "+DaoConstants.COLONNA_ID_TIPOLOGIA_DOCUMENTO+"=?");
			ps.setInt(1, idva);
			rs=ps.executeQuery();
			if(rs.next())
			{
				tipologiaDocumentoo=new TipologiaDocumento();
				tipologiaDocumentoo=makeObject(tipologiaDocumentoo,rs);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return tipologiaDocumentoo;
	}
	public List<TipologiaDocumento> findByExample(TipologiaDocumento tipologiaDocumento)
	{
		Connection c=null;
		Statement stm=null;
		ResultSet rs=null;
		TipologiaDocumento tipologiaDocumento1=null;
		List<TipologiaDocumento>list=new ArrayList<TipologiaDocumento>();
		String query="SELECT * FROM "+DaoConstants.NOME_TABELLA_TIPOLOGIA_DOCUMENTO+" WHERE 1=1 ";
		try
		{
			c=MyConnection.getConnection();
			if(tipologiaDocumento.getCodice()!=null && !(tipologiaDocumento.getCodice().equals("")))
			{
				query=query+" AND "+DaoConstants.COLONNA_CODICE_TIPOLOGIA_DOCUMENTO+" LIKE '"+tipologiaDocumento.getCodice()+"%'";
			}
			if((tipologiaDocumento.getDescrizione()!=null)&&!(tipologiaDocumento.getDescrizione().equals("")))
			{
				query=query+" AND "+DaoConstants.COLONNA_DESCRIZIONE_TIPOLOGIA_DOCUMENTO+" LIKE '"+tipologiaDocumento.getDescrizione()+"%'";
			}
			stm=c.createStatement();
			rs=stm.executeQuery(query);
			while(rs.next())
			{
				tipologiaDocumento1=new TipologiaDocumento();
				tipologiaDocumento1=makeObject(tipologiaDocumento1,rs);
				list.add(tipologiaDocumento1);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				stm.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return list;
	}
	public TipologiaDocumento makeObject(TipologiaDocumento tipologiaDocumento,ResultSet rs) throws SQLException
	{
		tipologiaDocumento.setIdDocumento(rs.getInt(DaoConstants.COLONNA_ID_TIPOLOGIA_DOCUMENTO));
		tipologiaDocumento.setCodice(rs.getString(DaoConstants.COLONNA_CODICE_TIPOLOGIA_DOCUMENTO));
		tipologiaDocumento.setDescrizione(rs.getString(DaoConstants.COLONNA_DESCRIZIONE_TIPOLOGIA_DOCUMENTO));
		return tipologiaDocumento;
	}
}
